<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of TipoCustoDAO
 *
 * @author thales
 */
class TipoCustoDAO {
    public $conn = null;
    
    public function __construct() {
        $this->conn = DB::getConn();
    }

    public function salvar( TipoCUstoVO $objTipoCusto ){
        $sql = 'insert into tipoCusto
                    (
                        descricao
                    )
                    values
                    (
                        ?
                    )';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objTipoCusto->getDescricao(), PDO::PARAM_STR);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o cliente!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $this->conn->lastInsertId(), __CLASS__);
        
        return true;
    }
    
    public function pesquisarDados( TipoCustoVO $objTipoCusto ){
        $sql = 'select 
                      id,
                      descricao
                from
                    tipoCusto
                where
                    descricao like ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objTipoCusto->getDescricao(), PDO::PARAM_STR);
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pesquisar os dados dos tipos de custos!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        $listaTipoCusto = array();
        while ( $tmp = $stt->fetch(PDO::FETCH_ASSOC) ) {
            $objTipoCusto = new TipoCustoVO();
            
            $objTipoCusto->setId($tmp['id']);
            $objTipoCusto->setDescricao($tmp['descricao']);
            
            $listaTipoCusto[] = $objTipoCusto;
        }
        
        return $listaTipoCusto;
    }
    
    public function pesquisar( TipoCustoVO $objTipoCusto ){
        $sql = 'select 
                      id,
                      descricao
                from
                    tipoCusto
                where
                    id =  ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objTipoCusto->getId(), PDO::PARAM_STR);
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pesquisar os dados dos tipos de custos!<br>' . var_dump($stt->errorInfo()) );
        } 
       
        $tmp = $stt->fetch(PDO::FETCH_ASSOC);

        $objTipoCusto->setId($tmp['id']);
        $objTipoCusto->setDescricao($tmp['descricao']);

        return $objTipoCusto;
    }
    
    /**
     * Método para alterar o tipo de custo
     * 
     * @param TipoCustoVO $objTipoCusto 
     */
    public function alterar ( TipoCustoVO $objTipoCusto ) {
        $sql = 'update 
                    tipoCusto
                set
                    descricao = ?
                where
                    id = ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objTipoCusto->getDescricao(), PDO::PARAM_STR);
        $stt->bindValue(2, $objTipoCusto->getId(), PDO::PARAM_INT);

        if ( !$stt->execute() ){
            throw new Exception('Não foi possível alterar o tipo de custo!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objTipoCusto->getId(), __CLASS__);
        
        return true;
    }
    
    /**
     * Método para excluir um tipo de custo
     * 
     * @param TipoCustoVO $objTipoCusto 
     */
    public function excluir ( TipoCustoVO $objTipoCusto ) {
        $sql = 'delete from tipoCusto where id = ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objTipoCusto->getId(), PDO::PARAM_INT);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível excluir o tipo de custo!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objTipoCusto->getId(), __CLASS__);
        
        return true;
    }
}

?>
